## 实验四 避障传感器检测障碍物

**![6-避障](media/e6dda88bb6faf8fc06d81361b7f48a3d.jpeg)**

### 🌟 项目简介  
本实验将使用 Keyes DIY 电子积木避障传感器，让 Raspberry Pi Pico「看见」前方是否有障碍物。当手或物体靠近传感器时，它会自动检测并告诉 Pico —— 我们再把结果在电脑屏幕上显示出来！就像小车的“眼睛”一样，是智能小车、自动避障机器人最基础的功能之一。

---

### ⚙️ 工作原理（小学生也能懂）  
避障传感器其实是一对“红外搭档”：  
- **左边是红外灯（发射管）**：像手电筒一样，不断发出人眼看不见的红外光；  
- **右边是红外眼（接收管）**：专门“看”有没有光反射回来。  

✅ **没障碍物时**：红外光飞出去就散掉了，没光回来 → 接收管“没看到”，S 引脚输出 **高电平（1）** → 显示 “All going well”；  
❌ **有障碍物时**：红外光碰到你的手/书本/墙壁，被反射回来 → 接收管“看到了”，S 引脚输出 **低电平（0）** → 显示 “There are obstacles”。

> 💡 小知识：传感器上的两个小旋钮（电位器）就像“音量+调频旋钮”——  
> - 左边旋钮调“红外光有多亮”（发射功率），  
> - 右边旋钮调“红外眼有多灵敏”（接收阈值）。  
> 调好它们，传感器就能在 2–20 cm 范围内稳定工作！

![](media/b495cb608076b22fb3f66a4c2154412b.png)

---

### 🧰 所需材料（全部配齐，直接开做！）

| ![rpi_pico-smd_1_breadboard](media/c4bec8956b5785f9b6c98b310e182d18.png) | ![KS3017 pico扩展板](media/b9233c67c93c243214388d668afe2eab.png) | ![KE4019](media/2c75b9fb9765429a74d7f57102b2ce87.png) | ![QQ图片20220426165815](media/47dfea4b451d23ee80c7faaf96e1ab6f.jpeg) | ![USB线](media/edbfec59fe015bd9987e4b4d542b466d.png) |
|--------------------------------------------------------------------------|------------------------------------------------------------------|-------------------------------------------------------|----------------------------------------------------------------------|------------------------------------------------------|
| Raspberry Pi Pico 板 ×1                                                  | Raspberry Pi Pico 扩展板 ×1                                       | Keyes 避障传感器 ×1                                   | 防反插 3Pin 线（黑/红/黄）×1                                         | Micro USB 数据线 ×1                                 |

📌 **小提示**：避障传感器有 3 根线——  
- **VCC（红）→ 接 3.3V 或 5V（本实验接 3.3V 更安全）**  
- **GND（黑）→ 接 GND**  
- **S（黄）→ 接 Pico 的 GPIO16（即引脚数字 16）**

---

### 🔌 接线图（一目了然）

**![Untitled Sketch_bb](media/907b768c61300aa3e16423c76e937681.jpeg)**

✅ 正确接法（请对照图检查）：  
- 传感器 **VCC（红）→ Pico 的 3.3V 引脚**（不是 VSYS！避免烧坏）  
- 传感器 **GND（黑）→ Pico 的 GND 引脚**（任意一个 GND 都可以）  
- 传感器 **S（黄）→ Pico 的 GP16 引脚**（即物理引脚第 21 脚）

⚠️ 注意：Pico 是 3.3V 系统，虽然该传感器支持 3.3V–5V，但首次测试建议用 **3.3V 供电**，更稳定、更安全！

---

### 💻 示例代码（MicroPython，复制即用）

 ```python
# ✨ Keyes 避障传感器实验（Pico 版）
# 📌 实验四：检测障碍物
# 📝 使用 GPIO16 读取传感器信号

from machine import Pin
import time

# 创建传感器对象：连接在 GP16，模式为输入（IN）
sensor = Pin(16, Pin.IN)

print("✅ 避障传感器已启动！")
print("👉 请将手慢慢靠近传感器前端……")

while True:
    # 读取传感器状态：0=检测到障碍物，1=无障碍物
    if sensor.value() == 0:
        print("🚨 There are obstacles!")
    else:
        print("🟢 All going well")
    
    time.sleep(0.1)  # 每0.1秒检测一次，避免刷屏太快
```

---

### 📖 代码解析（每行都看得懂）

| 代码行 | 中文说明 |
|--------|----------|
| `from machine import Pin` | 导入 Pico 的“引脚控制工具” |
| `import time` | 导入“时间工具”，用来加小暂停 |
| `sensor = Pin(16, Pin.IN)` | 把第 16 号引脚设为“输入口”，专门听传感器说话 |
| `if sensor.value() == 0:` | 如果传感器说“0”，代表它“看到”障碍物啦！ |
| `print("🚨 There are obstacles!")` | 在电脑屏幕上显示提醒（带表情更有趣 😄） |
| `time.sleep(0.1)` | 暂停 0.1 秒，让屏幕不疯狂滚动，也给传感器喘口气 |

💡 小技巧：你可以把 `0.1` 改成 `0.5`，让打印变慢；改成 `0.05`，反应更快哦！

---

### 🧪 实验现象（你将看到什么？）

运行代码后，在 Thonny 或其他 MicroPython IDE 的 **Shell（交互窗口）** 中，你会看到类似这样的滚动文字：

```
✅ 避障传感器已启动！
👉 请将手慢慢靠近传感器前端……
🟢 All going well
🟢 All going well
🟢 All going well
🚨 There are obstacles!
🚨 There are obstacles!
🟢 All going well
```

✅ 当手离传感器约 5–15 cm 时，会稳定显示 “There are obstacles”；  
✅ 拿开手后，立刻变回 “All going well”。

![5](media/b6c8dd9d0bc2889cac1ee92fa9037e77.jpeg)  
![](media/86fc39da5df74b72325d5daddff5af70.png)

---

### ⚠️ 注意事项（安全又成功的关键！）

1. **供电优先选 3.3V**：Pico 的 3.3V 引脚电流足够驱动该传感器，比接 5V 更稳定，避免干扰。
2. **别接错线！** 黄线（S）必须接 GP16；红线（VCC）不能接到 VSYS（那是 5V 输入口，可能损坏传感器）。
3. **调节电位器有方法**（第一次必看！）：
   - 🔧 **先调左边（发射功率）**：顺时针拧到底 → 再慢慢往回拧，直到传感器上的 **P 指示灯刚好不亮**（临界点最灵敏）；
   - 🔧 **再调右边（接收灵敏度）**：顺时针微调，同时观察 **S 指示灯**，让它也处于 **将亮未亮的临界状态**（此时响应最准，抗干扰最强）。
4. **环境光影响小，但别对着强光/阳光直射**：日光含红外成分，可能干扰判断；普通教室灯光完全没问题。
5. **传感器正对障碍物效果最好**：倾斜角度太大（＞30°）可能导致漏检。

---

### 🧠 扩展思维  
在本课 LED 闪烁的基础上，如果想让 Pico 在检测到障碍物时，**自动点亮板载 LED（GP25）并发出“滴”声（用蜂鸣器）**，该怎样修改代码？